package com.ynet.middleground.contract.bean;

import java.util.List;
import java.util.Map;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @author daigaole
 * @description 新建合约请求
 * @date 2020-03-18
 */
@Data
@ApiModel(value = "新建合约请求对象", description = "新建合约请求对象")
public class NewContractReq extends EnterpriseBaseReqObj {

    private static final long serialVersionUID = -4378251642022127600L;

    @ApiModelProperty(value = "业态公司 id \n（仅综合管理平台使用）", notes = "业态公司 id \n（仅综合管理平台使用）", dataType = "Integer")
    private Integer formatId;

    /* 调整的需求 begin */
    /**
     * 模板id
     */
    @ApiModelProperty(value = "需要根据模版生成合约或档案时，模板id(必填)", notes = "需要根据模版生成合约或档案时，模板id(必填)", dataType = "Integer")
    private Integer templateId;

    /**
     * 是否非制式：false-制式，true-非制式
     */
    /*@ApiModelProperty(value = "是否非制式：false-制式，true-非制式", notes = "是否非制式", dataType = "boolean")
    private boolean isNotStandard;*/

    /**
     * 签署方式：0-线上，1-线下
     */
    @ApiModelProperty(value = "如果是生成合约，签署方式（0-线上，1-线下）必填", notes = "签署方式", dataType = "String")
    @Size(max = 1, min = 1, message = "长度为1")
    @Pattern(regexp = "[01]", message = "签署方式：0-线上，1-线下")
    private String signedWay;

    /**
     * 上级合约id
     */
    @ApiModelProperty(value = "生成下级合约时，上级合约id", notes = "生成下级合约时，上级合约id", dataType = "Integer")
    private Integer parentId;

    /**
     * 描述备注
     */
    @ApiModelProperty(value = "描述备注", notes = "描述备注", dataType = "String")
    private String description;

    /**
     * 合约名称/档案名称
     */
    @ApiModelProperty(value = "生成合约的时候指代合约名称，生成档案的时候指代档案名称", notes = "生成合约的时候指代合约名称，生成档案的时候指代档案名称", required = true,
        dataType = "String")
    @NotBlank(message = "名称不能为空")
    private String name;

    /**
     * 渠道端业务id
     */
    @ApiModelProperty(value = "渠道端业务id", notes = "渠道端业务id", required = true, dataType = "String")
    @NotBlank(message = "渠道端业务id不能为空")
    private String busId;

    /**
     * 参数
     */
    @ApiModelProperty(value = "模版渲染参数，所有的key值都是模版参数的name值\n\n" + "如需要单元格合并，在对应的表格内容添加合并标记：\n"
        + "    垂直合并，在内容后添加：#m.tag.row#  如：1500#m.tag.row#\n    水平合并，在内容前添加：#m.tag.col#   如：#m.tag.col#1000\n\n注意：同一个单元格内容仅可选择一种合并方式，垂直合并、水平合并无法同时使用",
        notes = "", dataType = "java.util.Map")
    private Map<String, Object> parameter;

    /**
     * 表格合并单元格参数
     */
    @Valid
    @ApiModelProperty(value = "表格合并单元格参数", notes = "表格合并单元格参数")
    private List<MergeCellTableInfo> tableMergeCells;

    /**
     * 非制式合约内容（oss地址）
     */
    @ApiModelProperty(value = "如果是生成非制式合约，非制式合约文件地址必填\n短路径地址(包含 Bucket) \n  如：zhongtai/file.pdf",
        notes = "如果是生成非制式合约，非制式合约文件地址必填\n短路径地址(包含 Bucket) \n  如：zhongtai/file.pdf", dataType = "String")
    private String nonStandardContractOss;

    /**
     * 非制式二维码key
     */
    @ApiModelProperty(value = "如果是生成非制式合约，非制式二维码key必填", notes = "如果是生成非制式合约，非制式二维码key必填", dataType = "String")
    private String codeQrKey;

    /**
     * 非制式合约编号占位符key
     */
    @ApiModelProperty(value = "如果是生成非制式合约，合约编号占位符key必填", notes = "如果是生成非制式合约，合约编号占位符key必填", dataType = "String")
    private String placeholderKey;

    /**
     * 产品类型
     */
    @ApiModelProperty(value = "产品类型", notes = "产品类型", dataType = "String")
    private String productType;

    /**
     * 业务主体ID
     */
    @ApiModelProperty(value = "业务主体ID", notes = "业务主体ID", dataType = "String")
    private String subjectId;

    /**
     * 业务主体名称
     */
    @ApiModelProperty(value = "业务主体名称", notes = "业务主体名称", dataType = "String")
    private String subjectName;

    /**
     * 签署方Id
     */
    @ApiModelProperty(value = "签署方Id（如果是生成合约，签署方Id必填；若有多个，以英文逗号隔开）", notes = "签署方Id（如果是生成合约，签署方Id必填；若有多个，以英文逗号隔开）",
        dataType = "String")
    private String signatoryId;
    /**
     * 签署方名称
     */
    @ApiModelProperty(value = "签署方名称（如果是生成合约，签署方名称必填；若有多个，以英文逗号隔开）", notes = "签署方名称（如果是生成合约，签署方名称必填；若有多个，以英文逗号隔开）",
        dataType = "String")
    private String signatoryName;

    /**
     * 合约类型Code
     */
    @ApiModelProperty(value = "合约类型Code，非制式必填", notes = "合约类型Code，非制式必填", dataType = "String")
    private String contractTypeCode;

    /**
     * 公司编码
     */
    @ApiModelProperty(value = "公司编码", notes = "公司编码", dataType = "String", required = true)
    @NotBlank(message = "公司编码不能为空")
    private String companyCode;
    /* 调整的需求 end */

    /**
     * 合约编号
     * 
     * @author liulx
     * @date 2020-12-02 15:00:46
     */
    @ApiModelProperty(value = "合约编号\n该字段适用于复杂嵌套合约场景，生成合约中有需要用到其他合约的合约编号参数时，先调用「生成合约编号」服务提前生成合约编号\n一般情况无需使用该字段",
        notes = "合约编号\n该字段适用于复杂嵌套合约场景，生成合约中有需要用到其他合约的合约编号参数时，先调用「生成合约编号」服务提前生成合约编号\n一般情况无需使用该字段", dataType = "String")
    private String contractNo;

    /**
     * 档案涉及自然人ID
     */
    @ApiModelProperty(value = "档案涉及自然人ID（若模板类型为档案，则上送此字段）", notes = "档案涉及自然人ID（若模板类型为档案，则上送此字段）", dataType = "Integer")
    private Integer archiveNaturalPersonId;

    /**
     * 档案涉及企业ID
     */
    @ApiModelProperty(value = "档案涉及企业ID（若模板类型为档案，则上送此字段）", notes = "档案涉及企业ID（若模板类型为档案，则上送此字段）", dataType = "Integer")
    private Integer archiveEnterpriseId;

}
